home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 1998 November / IRIX 6.5.2 Base Documentation November 1998.img / usr / share / catman / u_man / cat3 / Tcl / upvar.z / upvar
Text File  |  1998-10-30  |  4KB  |  67 lines

  1.  
  2.  
  3.  
  4. uuuuppppvvvvaaaarrrr((((3333TTTTccccllll))))                                                        uuuuppppvvvvaaaarrrr((((3333TTTTccccllll))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      upvar - Create link to variable in a different stack frame
  10.  
  11. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.      uuuuppppvvvvaaaarrrr ?_l_e_v_e_l? _o_t_h_e_r_V_a_r _m_y_V_a_r ?_o_t_h_e_r_V_a_r _m_y_V_a_r ...?
  13.  
  14.  
  15. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  16.      This command arranges for one or more local variables in the current
  17.      procedure to refer to variables in an enclosing procedure call or to
  18.      global variables.  _L_e_v_e_l may have any of the forms permitted for the
  19.      uuuupppplllleeeevvvveeeellll command, and may be omitted if the first letter of the first
  20.      _o_t_h_e_r_V_a_r isn't #### or a digit (it defaults to 1111).  For each _o_t_h_e_r_V_a_r
  21.      argument, uuuuppppvvvvaaaarrrr makes the variable by that name in the procedure frame
  22.      given by _l_e_v_e_l (or at global level, if _l_e_v_e_l is ####0000) accessible in the
  23.      current procedure by the name given in the corresponding _m_y_V_a_r argument.
  24.      The variable named by _o_t_h_e_r_V_a_r need not exist at the time of the call;
  25.      it will be created the first time _m_y_V_a_r is referenced, just like an
  26.      ordinary variable.  _M_y_V_a_r may not refer to an element of an array, but   |
  27.      _o_t_h_e_r_V_a_r may refer to an array element.  UUUUppppvvvvaaaarrrr returns an empty string.
  28.  
  29.      The uuuuppppvvvvaaaarrrr command simplifies the implementation of call-by-name procedure
  30.      calling and also makes it easier to build new control constructs as Tcl
  31.      procedures.  For example, consider the following procedure:
  32.  
  33.           pppprrrroooocccc aaaadddddddd2222 nnnnaaaammmmeeee {{{{
  34.               uuuuppppvvvvaaaarrrr $$$$nnnnaaaammmmeeee xxxx
  35.               sssseeeetttt xxxx [[[[eeeexxxxpppprrrr $$$$xxxx++++2222]]]]
  36.           }}}}
  37.  
  38.      AAAAdddddddd2222 is invoked with an argument giving the name of a variable, and it
  39.      adds two to the value of that variable.  Although aaaadddddddd2222 could have been
  40.      implemented using uuuupppplllleeeevvvveeeellll instead of uuuuppppvvvvaaaarrrr, uuuuppppvvvvaaaarrrr makes it simpler for
  41.      aaaadddddddd2222 to access the variable in the caller's procedure frame.
  42.  
  43.      If an upvar variable is unset (e.g. xxxx in aaaadddddddd2222 above), the uuuunnnnsssseeeetttt operation|
  44.      affects the variable it is linked to, not the upvar variable.  There is  |
  45.      no way to unset an upvar variable except by exiting the procedure in     |
  46.      which it is defined.  However, it is possible to retarget an upvar       |
  47.      variable by executing another uuuuppppvvvvaaaarrrr command.
  48.  
  49.  
  50. KKKKEEEEYYYYWWWWOOOORRRRDDDDSSSS
  51.      context, frame, global, level, procedure, variable
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.